package miniapp

// 客服消息.
import (
	"wxsdk/miniapp/core"
)

const (
	MsgTypeText            core.MsgType = "text"            // 文本消息
	MsgTypeImage           core.MsgType = "image"           // 图片消息
	MsgTypeLink            core.MsgType = "link"            // 图文消息
	MsgTypeMiniProgramPage core.MsgType = "miniprogrampage" // 小程序卡片消息
)

type MsgHeader struct {
	ToUser  string       `json:"touser"` // 接收方 OpenID
	MsgType core.MsgType `json:"msgtype"`
}

// 文本消息
type Text struct {
	MsgHeader
	Text struct {
		Content string `json:"content"` // 支持换行符
	} `json:"text"`
}

// 新建文本消息.
func NewText(toUser, content string) (text *Text) {
	text = &Text{
		MsgHeader: MsgHeader{
			ToUser:  toUser,
			MsgType: MsgTypeText,
		},
	}
	text.Text.Content = content
	return
}

// 图片消息
type Image struct {
	MsgHeader
	Image struct {
		MediaId string `json:"media_id"` // 通过素材管理接口上传多媒体文件得到 MediaId
	} `json:"image"`
}

// 新建图片消息.
func NewImage(toUser, mediaId string) (image *Image) {
	image = &Image{
		MsgHeader: MsgHeader{
			ToUser:  toUser,
			MsgType: MsgTypeImage,
		},
	}
	image.Image.MediaId = mediaId
	return
}

// 图文消息里的 Link
type Link struct {
	MsgHeader
	Link struct {
		Title       string `json:"title,omitempty"`       // 图文消息标题
		Description string `json:"description,omitempty"` // 图文消息描述
		URL         string `json:"url,omitempty"`         // 点击图文消息跳转链接
		ThumbUrl    string `json:"thumb_url,omitempty"`   // 图文消息的图片链接
	} `json:"link"`
}

// 新建图文消息.
func NewLink(toUser, title, description, url, thumbUrl string) (link *Link) {
	link = &Link{
		MsgHeader: MsgHeader{
			ToUser:  toUser,
			MsgType: MsgTypeLink,
		},
	}
	link.Link.Title = title
	link.Link.Description = description
	link.Link.URL = url
	link.Link.ThumbUrl = thumbUrl
	return
}

// 小程序卡片消息
type MiniProgramPage struct {
	MsgHeader
	MiniProgramPage struct {
		Title        string `json:"title"`
		PagePath     string `json:"pagepath"`
		ThumbMediaId string `json:"thumb_media_id"`
	} `json:"miniprogrampage"`
}

// 小程序卡片消息.
//  如果不指定客服则 kfAccount 留空.
func NewMiniProgramPage(toUser, title, pagePath, thumbMediaId string) (miniProgramPage *MiniProgramPage) {
	miniProgramPage = &MiniProgramPage{
		MsgHeader: MsgHeader{
			ToUser:  toUser,
			MsgType: MsgTypeMiniProgramPage,
		},
	}
	miniProgramPage.MiniProgramPage.Title = title
    miniProgramPage.MiniProgramPage.PagePath = pagePath
	miniProgramPage.MiniProgramPage.ThumbMediaId = thumbMediaId
	return
}
